#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
内存分区 4区
    静态 全局       
        作用域      全局作用域覆盖整个文件
                    静态函数内部
        声明周期
                    从程序开始时创建 
                    到程序结束时销毁
    常量
        代码内部常量 
    堆              
        生命周期
                手动创建
                手动释放
    栈
        生命周期   如果在函数内  则函数开始创建 函数结束释放
                  自动创建
                  自动释放
*/

/*
相关函数
void *malloc(size_t size);
    创建 动态内存
void free(void *ptr);
    释放动态内存

void *calloc(size_t nmemb, size_t size);
    创建 动态内存 并清空

void *realloc(void *ptr, size_t size);
    扩容
    新建一个新内存 然后 将原本的数据拷贝到新内存中 然后释放 旧内存

    注意：容易造成数据丢失
void *memset(void *s, int c, size_t n);
参数:
    s 设定内存的首地址
    c 对内存中 每个字节填入的数据
    n 需要设定字节的大小
*/
int main(int argc, char const *argv[])
{
    // 动态空间初始化
    int * val = (int *)malloc(sizeof(int) * 10);

    // 清空内存
    memset(val , 0 , sizeof(int) * 10);
    //memset(val,0,sizeof(int)*10)  0 0 0 0 0 0 0
    //memset(val,'a',sizeof(int)*10) a a a a a a a

    // 打印内存
    printf("%d\n" , val[0]);
    
    // 释放内存
    free(val);
    val = NULL;
    return 0;
}